unit TVScanner_Unit;

interface

uses Forms,
     SysUtils,
     InformatiePopup_Unit,
     InternetPagina_Unit,
     InternHttpClient_Unit,
     Introductie_Unit,
     TaskIcon_Unit,
     TVGidsNLParser_Unit,
     TVScannerManager_Unit;

type
  TTVScanner = class(TObject)
  private
    { Private declarations }
    informatiePopup: TInformatiePopup_Form;
    internetPagina: TInternetPagina_Form;
    internHttpClient: TInternHttpClient;
    introductie: TIntroductie_Form;
    taskIcon: TTaskIcon;
    TVGidsNLParser: TTVGidsNLParser;
    TVScannerManager: TTVScannerManager;
  public
    { Public declarations }
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
  end;

implementation

  //////////////////////////////////////////////////////////////////////////////
  //object methoden
  //////////////////////////////////////////////////////////////////////////////

  {
    * AfterConstruction
  }
  procedure TTVScanner.AfterConstruction;
  var
    timer: Integer;
  begin

    //objecten aanmaken
    informatiePopup  := TInformatiePopup_Form.Create(Nil);
    internetPagina   := TInternetPagina_Form.Create(Nil);
    internHttpClient := TInternHttpClient.Create();
    introductie      := TIntroductie_Form.Create(Nil);
    taskIcon         := TTaskIcon.Create();
    TVGidsNLParser   := TTVGidsNLParser.Create();
    TVScannerManager := TTVScannerManager.Create();

    //introductie scherm tonen (2 seconden met fadein en out)
    introductie.showIntroductie(2000, true);

    //TVScannerManager instellen op gebruikte objecten
    TVScannerManager.var_InformatiePopup  := informatiePopup;
    TVScannerManager.var_InternetPagina   := internetPagina;
    TVScannerManager.var_InternHttpClient := internHttpClient;
    TVScannerManager.var_Introductie      := introductie;
    TVScannerManager.var_TaskIcon         := taskIcon;
    TVScannerManager.var_TVGidsNLParser   := TVGidsNLParser;

    //TVScannerManager starten
    TVScannerManager.startManager();

    //de TVGidsNLProgramma's ophalen
    //TVScannerManager.triggerTVGidsNLDownload();

    //////////////////////////////////////////////////////////////////////////////
    // globale applicatie lus
    //////////////////////////////////////////////////////////////////////////////

    //laat in de timer beginnen om na 20 seconden te downloaden van TVGidsNL
    timer := 8800;

    //applicatie lus starten
    while not Application.Terminated do
    begin

      //messages processen om TVScanner niet vast te laten lopen
      Application.ProcessMessages;

      //wacht tijd van 0,1 seconde om niet 100% CPU tijd te gebruiken
      Sleep(100);

      //bij 15 minuten opnieuw TVGidsNL programma's ophalen
      if ((timer mod 9000) = 0) then
        TVScannerManager.triggerTVGidsNLDownload();

      //bij 1/2 seconde informatie popup on top tonen
      if (timer mod 5) = 0 then
        informatiePopup.stayOnTop();

      //bij 1 seconde informatie popup triggeren om een nieuwe te tonen
      if (timer mod 10) = 0 then
        TVScannerManager.triggerMededeling();

      //timer resetten als deze te hoog wordt
      timer := timer + 1;
      if timer > 9000 then
        timer := 1;

    end;

    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////

  end;

  {
    * BeforeDestruction
  }
  procedure TTVScanner.BeforeDestruction;
  begin

    //objecten vrijgeven
    if Assigned(informatiePopup) then   informatiePopup.Free();
    if Assigned(internetPagina) then    internetPagina.Free();
    if Assigned(internHttpClient) then  internHttpClient.Free();
    if Assigned(introductie) then       introductie.Free();
    if Assigned(taskIcon) then          taskIcon.Free();
    if Assigned(TVGidsNLParser) then    TVGidsNLParser.Free();
    if Assigned(TVScannerManager) then  TVScannerManager.Free();
  end;

end.
